// canvas封装工具


/**
 * 测试方法
 */
function test() {
  // console.log("this is test......");
}


/**
 * 绘制圆角矩形
 * @parama int/float x            矩形位置x坐标
 * @parama int/float y            矩形位置y坐标
 * @parama int/float w            矩形宽度
 * @parama int/float h            矩形高度
 * @parama int/float r            圆角半径
 * @parama object <img>           矩形背景图(注意不是图片路径)
 */
function drawRoundedImg(ctx, x, y, w, h, r, bgimg) {
  ctx.save();
  ctx.beginPath();
  ctx.strokeStyle = "#FFFFFF";
  ctx.moveTo(x + r, y);
  ctx.arcTo(x + w, y, x + w, y + h, r);
  ctx.arcTo(x + w, y + h, x, y + h, r);
  ctx.arcTo(x, y + h, x, y, r);
  ctx.arcTo(x, y, x + w, y, r);
  ctx.stroke();
  ctx.clip();
  ctx.drawImage(bgimg, x, y, w, h);
  ctx.restore();
  ctx.closePath();
}


/**
* 计算换行文字
* @param canvas canvas上下文对象
* @param text 渲染文本
* @param x 渲染x轴位置
* @param y 渲染第一行y轴位置
* @param maxWidth 最大宽度
* @param lineHeight 行高
* @param maxLine 最大行数 超出隐藏并显示省略号 不传入则代表不限制
*/
function getWarpText(canvas, text, x, y, maxWidth, lineHeight, maxLine) {
  // 对入参的类型进行检测
  if (typeof text != 'string' || typeof x != 'number' || typeof y != 'number' || typeof lineHeight != 'number') {
    throw new Error("参数传入出错")
  }
  //如果最大宽度未定义 默认为canvas宽度
  if (typeof maxWidth == 'undefined') {
    maxWidth = (canvas && canvas.width);
  }
  if (typeof lineHeight == 'undefined') {
    lineHeight = (canvas.canvas && parseInt(window.getComputedStyle(canvas.canvas).lineHeight))
      || parseInt(window.getComputedStyle(document.body).lineHeight)
  }
  let arrText = text.split('');
  let line = '';
  let lines = [];
  let lastLine = ""
  let ellipsis = canvas.measureText("...");
  let ellipsisWidth = ellipsis.width;
  for (let n = 0; n < arrText.length; n++) {
    //每个循环累加字符
    let testLine = line + arrText[n];
    //检测累加字符 获取累加字符的高度和宽度
    let metrics = canvas.measureText(testLine);
    let testWidth = metrics.width;
    let lineWidth = canvas.measureText(line).width;

    // 如果当前添加行是最后一行 则替换最后一个字符为"..." 判断长度是否需要删去最后一个字符
    if (maxLine && maxLine - 1 === lines.length && ((lineWidth + ellipsisWidth) > maxWidth)) {
      line = line.slice(0, line.length - 1) + "...";
      testWidth = lineWidth + ellipsisWidth;
    }
    //如果累加字符的宽度大于定义的绘制文本最大宽度 则绘制累加字符的文本 并且设置换行间距再次进行绘制
    if (testWidth > maxWidth && n > 0) {
      lastLine = line;
      lines.push({
        text: line,
        x: x,
        y: y
      })
      if (maxLine && maxLine <= lines.length) {
        break
      }
      line = arrText[n];
      y += lineHeight;
    } else {
      line = testLine;
    }
  }
  if (lastLine !== line) {
    lines.push({
      text: line,
      x: x,
      y: y
    })
  }
  for (let i = 0; i < lines.length; i++) {
    const item = lines[i];
    canvas.fillText(item.text, item.x, item.y);

  }
  return lines;
}


module.exports = {
  test: test,
  drawRoundedImg: drawRoundedImg,
  getWarpText: getWarpText
}
